/*
 * LogsCargueGestionDAO.java
 *
 * Created on 12 de diciembre de 2006, 05:29 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.logsgestion.carguegestion.dao;

import com.src.computec.logsgestion.base.constantes.ConstantesGenerales;
import static com.src.computec.logsgestion.base.constantes.ConstantesGenerales.SCHEMA;
import static com.src.computec.logsgestion.base.constantes.ConstantesGenerales.PATH_ARCHIVOS_ALERTAS;
import com.src.computec.logsgestion.carguegestion.dto.LogCargueGestionDto;
import com.src.computec.logsgestion.carguegestion.dto.ProveedorDto;
import com.src.computec.radar.base.dao.GenericDAO;
import com.src.computec.radar.base.dao.exception.DAOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author jlperea
 */
public class LogsCargueGestionDAO extends GenericDAO implements BaseLogsCargueGestionDAO
{    
    ConstantesGenerales constantesGenerales = ConstantesGenerales.getInstance();
    /** Creates a new instance of CargueDAO */
    public LogsCargueGestionDAO() {
    }
    
    public List getProveedoresEmpresasMensajeria() throws DAOException 
    {
        Connection con = null;
        PreparedStatement statement = null;
        List retornoLst = new ArrayList();        
        ResultSet rs = null;
        
        try 
        {
            con = getConnectionDB2();
            statement = con.prepareStatement("SELECT CODIGO_PROVEEDOR, RAZON_SOCIAL, CODIGO_TIPO_PROVEEDOR FROM "+ SCHEMA +".PROVEEDOR WHERE CODIGO_TIPO_PROVEEDOR = ? " +
                                             "ORDER BY RAZON_SOCIAL ASC");
                        
            int indice=0;
            
            statement.setObject(++indice, ConstantesGenerales.CODIGO_TIPO_PROVEEDOR_MENSAJERIA);
            rs = statement.executeQuery();
            
            while(rs.next())
            {
                int indice1=0;
                
                ProveedorDto proveedorDto = new ProveedorDto(); 
                
                proveedorDto.setCodigoProveedor(rs.getString(++indice1));
                proveedorDto.setRazonSocial(rs.getString(++indice1));
                proveedorDto.setCodigoTipoProveedor(rs.getString(++indice1));
                retornoLst.add(proveedorDto);
            }
        }
        catch (SQLException e) 
        {
            throw new DAOException("LogsCargueGestionDAO:getProveedoresEmpresasMensajeria: " +e.toString(), e);
        } 
        finally 
        {
            closeConnection(con, statement,rs);
        }
        return retornoLst;
    }
    
    public List getLogsCargueGestionByBusqueda(LogCargueGestionDto dto) throws DAOException 
    {
        Connection con = null;
        PreparedStatement statement = null;
        List retornoLst = new ArrayList();        
        ResultSet rs = null;
        
        try 
        {
            con = getConnectionDB2();
            
            int indice = 0;
            
            if(dto.getCodigoProveedor() != null && !dto.getCodigoProveedor().equals(""))
            {
                statement = con.prepareStatement("SELECT CL.CODIGO_CARGUE_GESTION, CL.CODIGO_RESPONSABLE, CL.CODIGO_PROVEEDOR, CL.PATH_ARCHIVO_LOG, " +
                                                        "CL.FECHA_CARGUE, CL.TOTAL_REGISTROS, CL.NUMERO_ERRORES_REGISTROS, P.RAZON_SOCIAL "+
                                                 "FROM "+ SCHEMA +".CARGUE_GESTION_LOG CL, "+ SCHEMA +".PROVEEDOR P "+
                                                 "WHERE CL.CODIGO_PROVEEDOR = ?  AND CL.FECHA_CARGUE BETWEEN ? AND ? AND CL.CODIGO_PROVEEDOR = P.CODIGO_PROVEEDOR "+ 
                                                 "ORDER BY CL.FECHA_CARGUE DESC");
                
                
                statement.setObject(++indice, dto.getCodigoProveedor());
            }
            else
            {
                statement = con.prepareStatement("SELECT CL.CODIGO_CARGUE_GESTION, CL.CODIGO_RESPONSABLE, CL.CODIGO_PROVEEDOR, CL.PATH_ARCHIVO_LOG, " +
                                                        "CL.FECHA_CARGUE, CL.TOTAL_REGISTROS, CL.NUMERO_ERRORES_REGISTROS, P.RAZON_SOCIAL "+
                                                 "FROM "+ SCHEMA +".CARGUE_GESTION_LOG CL, "+ SCHEMA +".PROVEEDOR P "+
                                                 "WHERE CL.FECHA_CARGUE BETWEEN ? AND ? AND CL.CODIGO_PROVEEDOR = P.CODIGO_PROVEEDOR "+ 
                                                 "ORDER BY CL.FECHA_CARGUE DESC");
            }        
            
            statement.setObject(++indice, dto.getSearchDatesDto().getFecha1());
            statement.setObject(++indice, dto.getSearchDatesDto().getFecha2());
            rs = statement.executeQuery();
            
            while(rs.next())
            {
                int indice1 = 0;
                
                LogCargueGestionDto logCargueGestionDto = new LogCargueGestionDto(); 
                
                logCargueGestionDto.setCodigoCargueGestion(rs.getString(++indice1));
                logCargueGestionDto.setCodigoResponsable(rs.getString(++indice1));
                logCargueGestionDto.setCodigoProveedor(rs.getString(++indice1));
                logCargueGestionDto.setPathArchivo(rs.getString(++indice1) != null ? PATH_ARCHIVOS_ALERTAS + rs.getString(indice1): "");
                logCargueGestionDto.setFechaCargue( ConstantesGenerales.STRING_DATE_FORMAT.format(rs.getDate(++indice1)) );
                logCargueGestionDto.setTotalRegistros(rs.getInt(++indice1));
                logCargueGestionDto.setNumeroErrores(rs.getInt(++indice1));
                logCargueGestionDto.setNombreProveedor(rs.getString(++indice1));
                
                if(logCargueGestionDto.getNumeroErrores().intValue() > 0)
                {
                    logCargueGestionDto.setHasFile(true);
                }
                
                retornoLst.add(logCargueGestionDto);               
            }
        }
        catch (SQLException e) 
        {
            throw new DAOException("LogsCargueGestionDAO:getLogsCargueGestionByBusqueda: " +e.toString(), e);
        } 
        finally 
        {
            closeConnection(con, statement,rs);
        }
        return retornoLst;
    }
}
